import os
import asyncio
from dotenv import load_dotenv
from aiogram import Bot, Dispatcher, types, utils

load_dotenv()

bot = Bot(token=os.getenv('TOKEN'))
dp = Dispatcher(bot)

WELCOME_TEXT = (
"Приветствуем тебя в Российском сообществе разработчиков программного кода - "
"<b><a href='https://hub.mos.ru'>Mos.Hub</a></b>\n"
"Нажимая кнопку <b>'Далее'</b>, ты подтверждаешь своё участие в мероприятии в павильоне "
"<b>Умный город</b> на ВДНХ <b>16 ноября 2023 года</b>, где пройдёт оффлайн презентация платформы.")
NEXT_TEXT = (
"""А пока предлагаем тебе выполнить задание, которое подготовит тебя и поможет на мастер-классе.
Пройди по ссылке и следуй приложенной  инструкции""")
DONE_TEXT = (
"Для подтверждения выполнения домашнего задания нажми кнопку <b>'Готово'</b>"
)
FINISH_TEXT = (
"""Мы ждём тебя в павильоне <b><a href='https://smartcity.mos.ru'>Умный город</a></b>
по адресу: <i><b>просп. Мира, 119, стр. 461, Москва ВДНХ</b></i>
Стартуем в четверг <u>16 ноября в 11:00</u>
Будет интересно \U0001F609"""
)
IMAGE_PATH = 'imgs/logo.jpg'
DOCUMENT_PATH = 'docs/Инструкция_по_регистрации_на_мероприятие.pdf'
URLS = ['hub.mos.ru/smartcity/workshop1', 'hub.mos.ru/smartcity/workshop2', 'hub.mos.ru/smartcity/workshop3']

# Обработка команды /start с использованием декоратора message_handler
@dp.message_handler(commands=['start'])
async def send_start(message: types.Message):
    markup = types.InlineKeyboardMarkup()
    next_button = types.InlineKeyboardButton("Далее", callback_data="next")
    markup.add(next_button)

    with open(IMAGE_PATH, 'rb') as photo_file:
        photo = types.InputFile(photo_file)
        await message.answer_photo(photo=photo, caption=WELCOME_TEXT, reply_markup=markup, parse_mode=types.ParseMode.HTML)

# Обработка обратного вызова "next"
@dp.callback_query_handler(lambda c: c.data == 'next')
async def show_instruction(callback_query: types.CallbackQuery):
    user_id = callback_query.from_user.id
    url_index = user_id % len(URLS)  # Вычисляем индекс ссылки для пользователя
    url_to_send = URLS[url_index]  # Получаем ссылку для отправки

    markup = types.InlineKeyboardMarkup()
    project_button = types.InlineKeyboardButton("Ссылка на проект в Mos.Hub", callback_data="project", url=url_to_send)
    markup.add(project_button)

    with open(DOCUMENT_PATH, 'rb') as doc_file:
        document = types.InputFile(doc_file)
        await bot.send_document(callback_query.from_user.id, document, caption=NEXT_TEXT, reply_markup=markup)

    markup = types.InlineKeyboardMarkup()
    done_button = types.InlineKeyboardButton("Готово", callback_data="done")
    markup.add(done_button)
    await asyncio.sleep(60)
    await bot.send_message(callback_query.from_user.id, text=DONE_TEXT,
                           reply_markup=markup, parse_mode=types.ParseMode.HTML)

@dp.callback_query_handler(lambda c: c.data == 'done')
async def send_adress(callback_query: types.CallbackQuery):
    user_id = callback_query.from_user.id
    await bot.send_message(callback_query.from_user.id, FINISH_TEXT, parse_mode=types.ParseMode.HTML)
    # Отправка местоположения (координат)
    latitude = 55.83392233710506
    longitude = 37.63085854920095
    await bot.send_location(callback_query.from_user.id, latitude, longitude)

@dp.message_handler(commands=['dev'])
async def send_dev(message: types.Message):
    markup = types.InlineKeyboardMarkup()
    info_button = types.InlineKeyboardButton("\U0001F98A Source", callback_data="mos.hub",
                                             url='https://hub.mos.ru/despire_code/smartcity')
    markup.add(info_button)
    await message.answer(text='Created by @Niko_from_Niko', reply_markup=markup)

if __name__ == '__main__':
    utils.executor.start_polling(dp, skip_updates=True)
